package Experimentos;

import comun.Fichero;
import esc1Caso1.*;
import comun.GeneradorProblemas;

import aima.search.framework.Problem;
import aima.search.framework.Search;
import aima.search.framework.SearchAgent;
import aima.search.informed.HillClimbingSearch;
import aima.search.informed.SimulatedAnnealingSearch;
import IA.DistFS.Servers.WrongParametersException;

public class Main5 {

    public static void main(String [] args){
    	long tiempoIni = System.currentTimeMillis();
    	int numPruebas = 20;
    	int paraMedia = 10;
    	int media1 = 0;
    	int media2 = 0;
    	System.out.println("comparacion heuristicas caso1 y caso2 tiempoTotal");
    	System.out.println("CASO1   CASO2" );
        GeneradorProblemas generador = new GeneradorProblemas();
        try {
        	Fichero f2 = new Fichero("fichero2");
        
        	for(int i = 0; i < numPruebas; i++){
        		//Genera el estado inicial
                generador.generarExperimento1();
                for(int j = 0; j < paraMedia; j++){
                esc1Caso2.Estado caso1 = new esc1Caso2.Estado(generador.getPeticiones(), generador.getServidores(), generador.getNumServidores());
                Estado caso1b = new Estado(generador.getPeticiones(), generador.getServidores(), generador.getNumServidores());
                caso1.generarEstadoInicialMenorTiempo();
                caso1b.generarEstadoInicialMenorTiempo();
                
                //Crea y resuelve el problema
                Problem problema = new Problem(caso1, new esc1Caso2.FuncionSuccesores(false), new esc1Caso2.EsEstadoFinal() , new esc1Caso2.Heuristico(0.3));
                Search algoritmo = new HillClimbingSearch();
                SearchAgent agent = new SearchAgent(problema, algoritmo);
                
                //Crea y resuelve el problema
                Problem problemab = new Problem(caso1b, new FuncionSuccesores(false), new EsEstadoFinal() , new Heuristico());
                Search algoritmob = new HillClimbingSearch();
                SearchAgent agentb = new SearchAgent(problemab, algoritmob);
                
                esc1Caso2.Estado resultado = (esc1Caso2.Estado) algoritmo.getGoalState();
                Estado resultadob = (Estado) algoritmob.getGoalState();
                
                
                //Escribir en fichero
                f2.escribe(String.valueOf(resultadob.getTiempoMaximo()));
                long tiempoFinal = System.currentTimeMillis();
                //System.out.println((tiempoFinal-tiempoIni));
                media1 += resultadob.getTiempoTotal();
                media2 += resultado.getTiempoTotal();
        	}
                
                System.out.println((media1/paraMedia) +"   "+ (media2/paraMedia));
                media1 = 0;
                media2 = 0;
        }
        f2.cierraF();
        System.out.println("FIN");
        long tiempoFinal = System.currentTimeMillis();
        } catch (WrongParametersException e) {
                e.printStackTrace();
        } catch (Exception e) {
			e.printStackTrace();
		}
            
            
    }
}
